// 导入spark-md5模块
self.importScripts('/spark-md5.min.js');

// 接收主线程的数据，生成文件 hash
self.onmessage = e => {
    // 获取fileChunk列表
    const { fileChunkList } = e.data;
    const spark = new self.SparkMD5.ArrayBuffer();

    let percentage = 0;
    let count = 0;

    // 加载文件
    const loadNext = index => {
        // 创建一个文件阅读器
        const reader = new FileReader();

        // 将读取到的文件转化为buffer
        reader.readAsArrayBuffer(fileChunkList[index].file);

        // 加载文件完成
        reader.onload = ee => {
            count++;
            spark.append(ee.target.result);
            if (count === fileChunkList.length) {
                self.postMessage({
                    percentage: 100,
                    hash: spark.end()
                });
                self.close();
            } else {
                percentage += 100 / fileChunkList.length;
                self.postMessage({
                    percentage
                });
                // 递归计算下一个切片
                loadNext(count);
            }
        };
    };

    loadNext(0);
};
